package cn.com.sise.dao;

import cn.com.sise.pojo.Dictionary;
import cn.com.sise.pojo.Resources;
import cn.com.sise.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper
public interface UserDao {
    /**
     * 登录方法
     *
     * @param name     用户ID
     * @param password 用户密码
     * @return User
     */
    User login(@Param("name") String name, @Param("password") String password);

    /**
     * 根据用户ID获取信息
     *
     * @param name 用户ID
     * @return User
     */
    User getUserByName(@Param("name") String name);

    /**
     * 分页必须函数接口
     *
     * @param start 开始页面
     * @param count 页数和
     * @return List
     */
    List<User> getList(@Param("start") int start, @Param("count") int count);

    /**
     * 分页必需接口（获取总记录数）
     *
     * @return Integer
     */
    int getTotal();

    /**
     * 根据用户名模糊查询
     *
     * @param nameLike 模糊字段
     * @param start    开始页
     * @param count    总页数
     * @return List<User>
     */
    List<User> getListLike(@Param("nameLike") String nameLike, @Param("start") int start, @Param("count") int count);

    /**
     * 根据用户名模糊查询的记录数
     *
     * @param likeTotalName 模糊字段
     * @return int
     */
    int getLikeTotal(@Param("likeTotalName") String likeTotalName);

    /**
     * 添加用户
     *
     * @param user 用户信息
     * @return int
     */
    int insertUser(User user);

    /**
     * 删除用户
     *
     * @param user 用户信息
     * @return int
     */
    int deleteUser(User user);

    /**
     * 修改用户
     *
     * @param user 用户信息
     * @return int
     */
    int updateUser(User user);

    /**
     * 查询用户
     *
     * @param user 用户信息
     * @return User
     */
    User selectUserById(User user);

    /**
     * 查询所有的用户
     *
     * @return List<User>
     */
    List<User> selectAllUser();

    /**
     * 获取当前注册日期的用户数
     *
     * @param time 年
     * @return int
     */
    int getTimeForUser(@Param("time") String time);

    /**
     * 根据userID查询历史记录(词典)
     *
     * @param userId userId
     * @return List<Dictionary>
     */
    List<User> getHistoryDictionaryByUserId(@Param("userId") int userId);

    /**
     * 根据userID查询收藏记录（词典）
     *
     * @param userId userId
     * @return List<Dictionary>
     */
    List<User> getFavoritesDictionaryByUserId(@Param("userId") int userId);

    /**
     * 根据userID查询历史记录（视听资源）
     *
     * @param userId userId
     * @return List<Resources>
     */
    List<User> getHistoryResourcesByUserId(@Param("userId") int userId);

    /**
     * 根据userID查询收藏记录（视听资源）
     *
     * @param userId userId
     * @return List<Resources>
     */
    List<User> getFavoritesResourcesByUserId(@Param("userId") int userId);

}
